﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL;

namespace EDMS
{
    public partial class AddVoter : System.Web.UI.Page
    {

        DataClassesDataContext dc = new DataClassesDataContext();
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        //判断身份证号是否重复
        private static bool checkSfzh(string sf)
        {
            using (DataClassesDataContext dc = new DataClassesDataContext())
            {
                Xm vo = dc.Xm.FirstOrDefault(v => v.sfzh == sf);
                if (vo != null)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }
        //确认添加
        protected void btnOK_Click(object sender, EventArgs e)
        {
            if (txtXmxm.Text.Equals(""))
            {
                Frame.Global.GlobalFunctions.Alert("请输入选民姓名！");
            }
            //身份证号重复，不允许录入
            else if (txtSfzh.Text != null && checkSfzh(txtSfzh.Text) == false)
            {
                Frame.Global.GlobalFunctions.Alert("不允许录入重复的身份证号！");
            }
            else if (txtSybwtcs.Text.Equals(""))
            {
                Frame.Global.GlobalFunctions.Alert("请填写剩余委托次数！");
            }
            else if (cmbXb.Text.Equals(""))
            {
                Frame.Global.GlobalFunctions.Alert("请选择性别！");
            }
            else
            {
                insertVoter();
            }
        }
        //添加选民信息
        private void insertVoter()
        {
            using (DataClassesDataContext dc = new DataClassesDataContext())
            {
                Xm xm = new Xm();
                xm.xjbh = cmbXjbh.Value.ToString();
                xm.xmxm = txtXmxm.Text.Trim().ToString();
                //身份证号不重复，用户录入空值，取当前时间为ID
                if (txtSfzh.Text == "" && checkSfzh(txtSfzh.Text) == true)
                {
                    xm.sfzh = DateTime.Now.ToString("yyyyMMddHHmmssff"); ;
                }
                //身份证号不重复，非空录入，取文本框值
                if (txtSfzh.Text != "" && checkSfzh(txtSfzh.Text) == true)
                {
                    xm.sfzh = txtSfzh.Text.Trim().ToString();
                }
                xm.sjhm = txtSjhm.Text.Trim().ToString();
                xm.flag = "Y";
                xm.sybwtcs = Convert.ToInt32(txtSybwtcs.Text);
                xm.xb = cmbXb.Value.ToString();
                xm.sr = deSr.Text.ToString();
                xm.zz = txtZz.Text;
                xm.cym = txtCym.Text;
                dc.Xm.InsertOnSubmit(xm);
                dc.SubmitChanges();
                Frame.Global.GlobalFunctions.Alert("选民信息添加成功");
            }
        }
        //重置
        protected void btnEsc_Click(object sender, EventArgs e)
        {
            cmbXjbh.Text = "";
            cmbXb.Text = "";
            txtSfzh.Text = "";
            txtSjhm.Text = "";
            txtSybwtcs.Text = "";
            txtXmxm.Text = "";
            deSr.Text = "";
            txtZz.Text = "";
            txtCym.Text = "";
        }
        //身份证验证
        private bool CheckIDCard(string Id)
        {
            int intLen = Id.Length;
            long n = 0;

            if (intLen == 18)
            {
                if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
                {
                    return false;//数字验证
                }
                string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
                if (address.IndexOf(Id.Remove(2)) == -1)
                {
                    return false;//省份验证
                }
                string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
                DateTime time = new DateTime();
                if (DateTime.TryParse(birth, out time) == false)
                {
                    return false;//生日验证
                }
                string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
                string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
                char[] Ai = Id.Remove(17).ToCharArray();
                int sum = 0;
                for (int i = 0; i < 17; i++)
                {
                    sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
                }
                int y = -1;
                Math.DivRem(sum, 11, out y);
                if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
                {
                    return false;//校验码验证
                }
                return true;//符合GB11643-1999标准
            }
            else if (intLen == 15)
            {
                if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
                {
                    return false;//数字验证
                }
                string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
                if (address.IndexOf(Id.Remove(2)) == -1)
                {
                    return false;//省份验证
                }
                string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
                DateTime time = new DateTime();
                if (DateTime.TryParse(birth, out time) == false)
                {
                    return false;//生日验证
                }
                return true;//符合15位身份证标准
            }
            else
            {
                return false;//位数不对
            }
        }

    }
}